﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using WebComponents.Data;
using WebComponents;
using WebComponents.Security;
using System.Collections.Generic;
using GBIT.Web;
using System.Linq;
using System.Linq.Expressions;
using WebComponents.Caching;

public partial class TinTucList : UserControlBase {
  public string tabid = "";
  private List<ArticleInfo> ArticleInfoList = null;
  protected void Page_Load(object sender, EventArgs e) {
    this.AddModule = "TinTuc/ThemTinTuc.ascx";
    tabid = ToString(Request.Params["tabid"]);
    if (!Page.IsPostBack) {
      cmbChuyenMuc.Items.Add(new ListItem("--Tất cả--", "0"));
      Global.LoadCategory(cmbLanguage.SelectedValue, ref cmbChuyenMuc, CatetoryType.News);
      grvArticleInfo.DataSource = GetNews();
      grvArticleInfo.DataBind();
    }
    this.AddEnabled = true;
    this.Title = "Danh sách bài viết";
  }
  protected override void OnTaskSubmit(TaskArgs e) {
    ArticleInfo article = null;
    switch (e.Task) {
      case Task.ChangeStatus:
        article = ArticleController.GetByArticleID(ToInt(e.ID));
        if (article != null) {
          if (article.IsApproved == true)
            article.IsApproved = false;
          else
            article.IsApproved = true;
          ArticleController.Update(article);
          Security.ShowClientMessage(this.Page, "Thay đổi trạng thái bài viết thành công");
        }
        break;
      case Task.MoveDown:
        int kq = ArticleController.MoveDown(ToInt(e.ID));
        if (kq > 0)
          Security.ShowClientMessage(this.Page, "Di chuyển bài viết xuống dưới thành công");
        else
          Security.ShowClientMessageError(this.Page, "Di chuyển bài viết xuống dưới không thành công.\r\nVì bài viết di chuyển là bài viết cuối.");
        break;
      case Task.MoveUp:
        kq = ArticleController.MoveUp(ToInt(e.ID));
        if (kq > 0)
          Security.ShowClientMessage(this.Page, "Di chuyển bài viết lên trên thành công");
        else
          Security.ShowClientMessageError(this.Page, "Di chuyển bài viết lên trên không thành công.\r\nVì bài viết di chuyển là bài viết đầu.");
        break;
      case Task.SaveOrder:
        bool success = false;
        foreach (GridViewRow row in grvArticleInfo.Rows) {
          TextBox txt = row.FindControl("txtOrder") as TextBox;
          string[] arr = txt.ToolTip.Split('#');
          if (ToInt(arr[1]) != ToInt(txt.Text) && ToInt(txt.Text) > 0) {
            ArticleController.UpdateOrderId(ToInt(arr[0]), ToInt(txt.Text));
            success = true;
          }
        }
        if (success) {
          Security.ShowClientMessage(this.Page, "Cập nhật thông tin vị trí bài viết thành công");
          CacheManager.RemoveCache(ArticleController.cacheKey);
        } else
          Security.ShowClientMessage(this.Page, "Không có bài viết nào thay đổi vị trí");
        break;
    }
    grvArticleInfo.DataSource = GetNews();
    grvArticleInfo.DataBind();
  }
  private List<ArticleInfo> GetNews() {
    var kq = ArticleController.GetByCultureID(cmbLanguage.SelectedValue);
    if (kq.Count > 0 && cmbChuyenMuc.SelectedIndex != 0)
      kq = kq.Where(a => a.CateID == ToInt(cmbChuyenMuc.SelectedValue)).ToList();
    if (kq.Count > 0 && chkNoiBat.Checked) {
      kq = kq.Where(a => a.OnlyForMembers == true).ToList();
    }
    if (kq.Count > 0 && chkSlideShow.Checked) {
      kq = kq.Where(a => a.StatusID == 2).ToList();
    }
    //if (kq.Count > 0 && cmbChuyenMuc.SelectedIndex != 0)
    //  kq = kq.Where(a => a.CateID == ToInt(cmbChuyenMuc.SelectedValue)).ToList();
    //if (kq.Count > 0 && cmbStatus.SelectedIndex != 0)
    //  kq = kq.Where(a => a.StatusID == ToInt(cmbStatus.SelectedValue)).ToList();
    if (kq.Count <= 0) {
      this.EditEnabled = false;
      this.DeleteEnabled = false;
      this.CopyEnabled = false;
    } else {
      this.EditEnabled = true;
      this.DeleteEnabled = true;
      this.CopyEnabled = true;
    }
    return kq;
  }
  public string GetCategoryName(object obj) {
    string str = "";
    foreach (ListItem item in cmbChuyenMuc.Items) {
      if (item.Value == ToString(obj))
        return item.Text;
    }
    return str;
  }
  protected void grvArticleInfo_PageIndexChanging(object sender, GridViewPageEventArgs e) {
    ArticleInfoList = GetNews();
    grvArticleInfo.PageIndex = e.NewPageIndex;
    grvArticleInfo.DataSource = ArticleInfoList;
    grvArticleInfo.DataBind();
  }
  protected void grvArticleInfo_Sorting(object sender, GridViewSortEventArgs e) {
    ArticleInfoList = GetNews();
    ArticleInfoList.Sort(new ObjectComparer<ArticleInfo>(e.SortExpression, ObjectComparer<ArticleInfo>.AutoSortDirection));
    grvArticleInfo.DataSource = ArticleInfoList;
    grvArticleInfo.DataBind();
  }
  protected void cmbLanguage_SelectedIndexChanged(object sender, EventArgs e) {
    grvArticleInfo.DataSource = GetNews();
    grvArticleInfo.DataBind();
  }
  protected override void OnDeleteRecord() {
    foreach (GridViewRow row in grvArticleInfo.Rows) {
      if (((HtmlInputCheckBox)row.FindControl("chkSelect")).Checked) {
        ArticleController.Delete(ConvertType.ToInt(((HtmlInputCheckBox)row.FindControl("chkSelect")).Attributes["title"].ToString()));
      }
    }
    grvArticleInfo.DataSource = GetNews();
    grvArticleInfo.DataBind();
  }
  protected void cmbStatus_SelectedIndexChanged(object sender, EventArgs e) {
    grvArticleInfo.DataSource = GetNews();
    grvArticleInfo.DataBind();
  }
  protected void cmbChuyenMuc_SelectedIndexChanged(object sender, EventArgs e) {
    grvArticleInfo.DataSource = GetNews();
    grvArticleInfo.DataBind();
  }
  protected void btnSearch_Click(object sender, EventArgs e) {
    if (txtKeyWord.Text != "") {
      grvArticleInfo.DataSource = ArticleController.Search(cmbLanguage.SelectedValue, txtKeyWord.Text.Trim(), GetNews());
      grvArticleInfo.DataBind();
    } else {
      grvArticleInfo.DataSource = GetNews();
      grvArticleInfo.DataBind();
    }
  }
  protected void chkSlideShow_CheckedChanged(object sender, EventArgs e) {
    grvArticleInfo.DataSource = GetNews();
    grvArticleInfo.DataBind();
  }
  protected void chkNoiBat_CheckedChanged(object sender, EventArgs e) {
    grvArticleInfo.DataSource = GetNews();
    grvArticleInfo.DataBind();
  }
}
